<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>JS练习</title>
</head>
<body>
    <script>
        // console.log('这是一条日志');
        // consol.log('错误信息');
        // var只能在函数才能体现出作用域，其他代码块对它无效
        // var a = 10;
        // let s = 'hello';
        // let b;
        // let s2 = '你好';
        // let c = null;
        // console.log(a);
        // console.log(s);
        // // b未被初始化，输出undefined
        // console.log(b);
        // // undefined + 字符串会进行字符串拼接，但是没多大意义
        // console.log(b + s);
        // // 字符串拼接
        // console.log('hello' + ' word');
        // console.log('hello "world"');
        // console.log("hello 'world'");
        // // 长度单位是字符
        // console.log(s.length);
        // console.log(s2.length);
        // // 输出null
        // console.log(c);

        // 比较运算符，==,!=,===,!==
        // == 和 != 只比较两个变量的值，而不比较类型，如果两个变量能够进行隐式类型转换，转成相等的值，那么也认为是相等的
        // === 和 !== 既比较变量的值，也比较类型，如果类型不相等，那么直接认为两个变量不相等
        // let a = 2;
        // let s = '2';
        // console.log(a == s);
        // console.log(a === s);

        // && 和 || 返回的是其中一个表达式
        // c = a || b，如果a的值是真（非0），那么c的值就是a,如果a是0或者false，那么c的值就是b
        // 衍生出一种写法，如果某个值不是null，就把值赋过去，否则赋一个默认值
        // let a = null;
        // a = a || 10;
        // console.log(a);
        // 同理，c = a && b，如果a是假(0)，那么c = a，如果a为真，那么c = b
        // let b = 0;
        // let c = null;
        // c = a && b;
        // console.log(c);

        // 除法运算符，/，由于JS不区分整数和浮点数，那么1 / 2 = 0.5
        // console.log(1 / 2);
        // console.log(1 % 2);

        // JS数组
        // 数组就是数组，不区分整型，字符串等等，因此一个数组可以放不同类型的元素
        // 数组创建
        // 1. let a = new Array();(很少使用)
        // 2. 直接使用中括号
        // let arr = [20,10,20];
        // //打印数组内容
        // console.log(arr);
        // //通过下标打印数组内容
        // for(let i = 0; i < arr.length; i++) {
        //     console.log(arr[i]);
        // }

        let arr2 = [10, 'hello', true];
        // console.log(arr2);
        // arr2[5] = 0;
        // console.log(arr2[5]);
        // console.log(arr2[4]);
        // // -1不能理解为下标，可以理解为键值对中的key，那么值就是val
        // // 这些键值对不改变数组length大小
        // arr2[-1] = 10;
        // arr2['key'] = 'val';
        // arr2['num'] = 10;
        // // 字符串长度可以修改
        // arr2.length = 2;
        // console.log(arr2);
        // // 如果先改短，再改长，原来丢失的数据就丢了
        // arr2.length = 6;
        // console.log(arr2);
        // 新增数组元素，在数组结尾新增
        for(let i = 0; i < 5; i++) {
            arr2.push(i);
        }
        console.log(arr2);
        // 删除/插入元素，如果只有一个参数，会把i之后的元素全部删除
        // 如果有两个参数i,j，那么就删除从i开始，数j个元素删除
        // 如果有两个以上的参数，那么从第三个参数算起，将之后的元素替换到从i下标算起，之后的j个元素的位置
        arr2.splice(4, 3, 100, 200, 300,400);
        console.log(arr2);
        // 这种情况就相当于从i下标往后插入元素，不删除也不替换
        arr2.splice(1,0,100,200);
    </script>
</body>
</html>